package com.wk.wms.config;

import com.wk.common.constant.mq.ItemExchange;
import com.wk.common.constant.mq.ItemQueue;
import com.wk.common.constant.mq.ItemRoutingKey;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.HashMap;
import java.util.Map;

/**
 * 监听并解锁商品库存锁定成功但出现异常未能成功创建订单的商品库存
 */
@Configuration
public class RabbitMQConfig {

    /**
     * 延时队列绑定交换机 routingKey为stock.ttl的延时消息先发送到该交换机 再转发到该交换机绑定的队列中
     */
    @Bean
    public Binding stockDelayBinding(){
        return new Binding(ItemQueue.STOCK_DELAY_QUEUE,
                Binding.DestinationType.QUEUE,
                ItemExchange.ORDER_EXCHANGE,
                ItemRoutingKey.STOCK_TTL,
                null);
    }

    /**
     * 延时队列 存放延时交换机发送的消息  超时后转发消息给 routingKey 为 stock.unlock 的库存解锁交换机
     */
    @Bean
    public Queue stockDelayQueue(){
        Map<String, Object> arguments = new HashMap<>();
        arguments.put("x-dead-letter-exchange", ItemExchange.ORDER_EXCHANGE);  //死信交换机
        arguments.put("x-dead-letter-routing-key", ItemRoutingKey.STOCK_UNLOCK);  //死信路由
        arguments.put("x-message-ttl", 60000);                     //消息延时时间 单位/毫秒
        return new Queue(ItemQueue.STOCK_DELAY_QUEUE, true, false, false, arguments);
    }

}
